МІНІСТЕРСТВО ОСВІТИ УКРАЇНИ
ДЕРЖАВНИЙ УНІВЕРСИТЕТ «ЛЬВІВСЬКА ПОЛІТЕХНІКА»
Побудова інфрачервоних детекторів руху на AVR-мікроконтролерах
Лабораторна робота № 3
З курсу «Мікропроцесорні пристрої»
Львів 2010
Мета роботи – ознайомитись з побудовою інфрачервоних детекторів руху і їх програмно апаратною реалізацією на AVR-мікроконтролерах.
ЗАВДАННЯ
Домашня підготовка до роботи
1.Вивчити теоретичний матеріал.
2.Вивчити основні властивості МК необхідні для виконання лабораторної роботи.
3.Підготувати програму функціонування охоронної системи
Виконати в лабораторії
1.Створити проект в AVR Studio, ввести свою програму, провести її асемблювання.
2.В режимі покрокової відладки переконатися в правильності роботи програми.
3.Відкрити файл-схему у програмі Proteus, підключити до МК hex-файл.
4.Запустити режим симуляції схеми та перевірити правильність функціонування охоронної системи у всіх режимах роботи.
ТЕКСТ ПРОГРАМИ
.include "2313def.inc"
.def temp = r16
.def temp2 = r20
.equ LED = 1
.equ DOUT = 0
.equ SCLK = 1
.equ CS = 2
.equ SHDN = 3
.def Delay_b1 = r17;
.def Delay_b2 = r18;
.def Delay_b3 = r19;
.def Result_l=R21
.def Result_h=R22
.equ T_Scan = 1000
.equ T_Led =99900
.equ T_Start = 49
.equ N = 2000;
.equ V_N = 0x0339
.equ V_P = 0x4511
.cseg
;--адреси переривань---
.org 0
rjmp init;
.org 0x004
rjmp Timer;
;--початок виконання програми--
init:
ldi temp, low(RAMEND);стек в кінець
out SPL, temp
;налаштування портів на ввід і вивід
sbi DDRD, LED
sbi PORTD, LED
clr temp
ldi temp,(1<<SCLK)+(1<<CS)+(1<<SHDN)+(0<<DOUT);налаштування виходів та входу для АЦП
out DDRB, temp;
ldi temp,(0<<SCLK)+(1<<CS)+(0<<SHDN)+(0<<DOUT);налаштування...
out PORTB,temp;стану виходів для АЦП та непіддягування резистора!
cli;заблокувати переривання
ldi temp, high(N)
out OCR1AH, temp;завантажуємо число для порівняння...
ldi temp, low(N)
out OCR1AL, temp;у регістр порівняння таймера
ldi temp, (1<<OCIE1A);дозвіл переривання при співпадінні...
out TIMSK, temp;регістру із числом.
ldi temp, (1<<CTC1)+(0<<CS12)+(0<<CS11)+(1<<CS10);скид тамера лічильника при спрацюванні...
out TCCR1B, temp;і коефіцієнт ділення =1.
ldi temp, (1<<SE);дозвіл на режим сну.
out MCUCR, temp
wait:
sei;дозволити переривання
;sleep ;сон)
nop
rjmp wait;
;обробка переривання від таймера
;-------------------------------
Timer:
ldi temp, (0<<CS12)+(0<<CS11)+(0<<CS10);тамер зупинено.
out TCCR1B, temp;
rcall ACP;
ldi temp, low(V_P); якщо результат...
ldi temp2, high(V_P); більший за задане...
sub temp, result_l; число то...
sbc temp2, result_h; переходимо до сирени.
brcs Alarm
ldi temp, low(V_N); якщо результат...
ldi temp2, high(V_N); менший за задане...
sub temp, result_l; число то...
sbc temp2, result_h; переходимо до сирени.
brsh Alarm
sbi PORTD, LED; інакше залишаємо діод без змін
rjmp end; кінець обробки переривання.
Alarm:
cbi PORTD, LED; вмикаємо СД.
ldi Delay_b1, low(T_Led)
ldi Delay_b2, high(T_Led)
ldi Delay_b3, byte3(T_Led)
rcall Delay; затримка свічення СД.
sbi PORTD, LED; вимикаємо СД.
end:
ldi temp, (1<<CTC1)+(0<<CS12)+(0<<CS11)+(1<<CS10);налаштування таймера знову на роботу...
out TCCR1B, temp; по зрізу
reti;
;--процедура анал цифр зчитування------
ACP:
clr Result_l;очищуємо для запису результату перетворення
clr Result_h;очищуємо для запису результату перетворення
sbi PORTB, SHDN;вмикаємо АЦП
ldi Delay_b1, low(T_Start)
ldi Delay_b2, high(T_Start)
ldi Delay_b3, byte3(T_Start)
rcall Delay;затримка для повного вмикання АЦП
cbi PORTB, CS;запуск перетворення по спадаючому фронту
eoc:
sbis PINB, DOUT;чекаємо коли закінчиться перетворення
rjmp eoc
rcall Bit_Read;читаємо 11 біт результату перетворення
bld result_h,3;запис 11 біту у результат через прапорець t.
rcall Bit_Read;читаємо 10 біт результату перетворення
bld result_h,2;запис 10 біту у результат через прапорець t.
rcall Bit_Read;читаємо 9 біт результату перетворення
bld result_h,1;запис 9 біту у результат ч...